package cl.zeke.cursos.jsf2spring3jpa2.vista.managedbeans.ejercicio7;

import cl.zeke.cursos.jsf2spring3jpa2.negocio.entities.Mascota;
import cl.zeke.cursos.jsf2spring3jpa2.negocio.entities.Persona;
import cl.zeke.cursos.jsf2spring3jpa2.negocio.entities.TipoMascota;
import cl.zeke.cursos.jsf2spring3jpa2.negocio.exceptions.LogicaNegocioException;
import cl.zeke.cursos.jsf2spring3jpa2.negocio.services.Ejercicio7Service;
import cl.zeke.cursos.jsf2spring3jpa2.util.ConstantesUtil;
import cl.zeke.java.commons.jsf2.Jsf2Util;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import org.primefaces.context.RequestContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Component
@Scope("view")
public class Ejercicio7Pag1Bean implements Serializable{
    
    private static Logger log = LoggerFactory.getLogger(Ejercicio7Pag1Bean.class);
    
    @Autowired
    private Ejercicio7Service ejercicio7Service;
    
    private List<Persona> personaList;
    private List<TipoMascota> tipoMascotaList;
    private Persona persona;

    @PostConstruct
    public void iniciar() {
        log.debug("Iniciar Ejercicio7Pag1Bean <-------------------");
        tipoMascotaList = ejercicio7Service.traerTipoMascotaTodos();
        personaList = ejercicio7Service.traerTodasPersonasConMascotas();
    }
    
    public void abrirDialogoGuardarPersona(Persona p) {
        if(p == null) {
            persona = new Persona();
            persona.setMascotaList(new ArrayList<Mascota>());
        }else {
            persona = p;
        }
        RequestContext.getCurrentInstance().execute("wvGuardarPersona.show()");
    }
    
    public void guardarPersona() {
        try{
            ejercicio7Service.guardarPersona(persona);
            personaList = ejercicio7Service.traerTodasPersonasConMascotas();
            Jsf2Util.addInfoMessage("Se guardo exitosamente persona");
            RequestContext.getCurrentInstance().execute("wvGuardarPersona.hide()");
        }catch(LogicaNegocioException ex) {
            Jsf2Util.addErrorMessage(ex.getMessage());
        }catch(Exception ex) {
            log.error("error", ex);
            Jsf2Util.addErrorMessage(ConstantesUtil.MSJ_ERROR_INTERNO);
        }
    }
    
    public void seleccionarPersona(Persona p) {
        this.persona = p;
    }
    
    public void eliminarPersona() {
        try {
            ejercicio7Service.eliminarPersona(persona);
            personaList = ejercicio7Service.traerTodasPersonasConMascotas();
            Jsf2Util.addInfoMessage("Se elimino exitosamente persona");
        }catch(LogicaNegocioException ex) {
            Jsf2Util.addErrorMessage(ex.getMessage());
        }catch(Exception ex) {
            log.error("error", ex);
            Jsf2Util.addErrorMessage(ConstantesUtil.MSJ_ERROR_INTERNO);
        }
    }

    /* getters and setters */
    public List<Persona> getPersonaList() {
        return personaList;
    }

    public void setPersonaList(List<Persona> personaList) {
        this.personaList = personaList;
    }

    public List<TipoMascota> getTipoMascotaList() {
        return tipoMascotaList;
    }

    public void setTipoMascotaList(List<TipoMascota> tipoMascotaList) {
        this.tipoMascotaList = tipoMascotaList;
    }

    public Persona getPersona() {
        return persona;
    }

    public void setPersona(Persona persona) {
        this.persona = persona;
    }
}
